package com.xzy.servlet;



import com.xzy.service.BookService;
import com.xzy.service.BookServiceVip;
import org.junit.Test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

public class BookServlet {
    BookService bookService=new BookServiceVip();

    /**
     * 更换功能需要修改源代码
     */
    @Test
    public void save() throws ClassNotFoundException {
        System.out.println("BookServlet.......save");
        bookService.save();
        //根据类的全类名通过Class获取类的Class加载器
        Class cla = Class.forName("com.xzy.service.BookServiceVip");
        //类的加载器可以获得类中的东西----属性(存储数据)、构造方法(创建对象)、功能方法(完成功能)
        //1.获取类中的属性
        Field[] fields = cla.getFields();//只能获取共有的属性
        for (Field field : fields) {
            System.out.println(field);
        }

        System.out.println("---------------");

        Field[] fields1 = cla.getDeclaredFields();//可以获取任意修饰符修饰的属性
        for (Field field : fields1) {
            System.out.println(field);
        }

        System.out.println("==================");

        //2.获取类中的构造方法
        Constructor[] constructors = cla.getConstructors();
        for (Constructor constructor : constructors) {
            System.out.println(constructor);
        }

        System.out.println("----------");

        Constructor[] constructors1 = cla.getDeclaredConstructors();
        for (Constructor constructor : constructors1) {
            System.out.println(constructor);
        }
    }
}
